package com.misboot.document.controller;


import cn.xuyanwu.spring.file.storage.FileInfo;
import cn.xuyanwu.spring.file.storage.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;


/**
 * 文件上传封装
 * 本地
 * minio
 * oss
 *
 * @Author 湖南佐佑时代科技有限公司（https://www.zuoyo.com）
 * @Version V5.4.21
 * @Email service@zuoyo.com
 * @Date 2023/03/10
 */
@RestController
@RequestMapping("/fileDetail")
public class FileDetailController extends DocumentBaseController {

    @Autowired
    private FileStorageService fileStorageService;//注入实列

    /**
     * 上传文件，成功返回文件 url
     */
    @PostMapping("/uploadFile.api")
    public String uploadFile(MultipartFile file,
                             String objectId,
                             String objectType,
                             String platform,
                             String Attr) {
        FileInfo fileInfo = fileStorageService.of(file)
                .setPlatform(platform)    // 使用指定的存储平台
                .setObjectId(objectId)   //关联对象id，为了方便管理，不需要可以不写
                .setObjectType(objectType) //关联对象类型，为了方便管理，不需要可以不写
                .putAttr("Attr", "") //保存一些属性，可以在切面、保存上传记录、自定义存储平台等地方获取使用，不需要可以不写
                .upload();  //将文件上传到对应地方
        return fileInfo == null ? "上传失败！" : fileInfo.getUrl();
    }

    /**
     * 上传图片，成功返回文件信息
     */
    @PostMapping("/uploadImage")
    public FileInfo uploadImage(MultipartFile file,
                                String ObjectId,
                                String ObjectType,
                                String Platform,
                                String Attr) {
        FileInfo fileInfo = fileStorageService.of(file)
                .setPlatform(Platform)
                .setObjectId(ObjectId)
                .setObjectType(ObjectType)
                .putAttr("Attr", "")
                .image(img -> img.size(1000, 1000))  //将图片大小调整到 1000*1000
                .thumbnail(th -> th.size(200, 200))  //再生成一张 200*200 的缩略图
                .upload();
        return fileInfo;
    }


//    下载

}
